/*
 *  Copyright 2010 Alexey Frishman (alexey.frishman@gmail.com)
 *  
 *  Licensed under the Apache License, Version 2.0 (the "License"); you may not
 *  use this file except in compliance with the License. You may obtain a copy of
 *  the License at
 *  
 *  http://www.apache.org/licenses/LICENSE-2.0
 *  
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 *  License for the specific language governing permissions and limitations under
 *  the License.
 * 
 */

package org.json4g;

import java.util.ArrayList;
import java.util.HashMap;

import org.json4g.serialization.JsonSerializerFacade;
import org.json4g.serialization.policy.SerializationPolicy;
import org.json4g.serialization.policy.jaxb.JaxbFieldNamePolicy;
import org.json4g.serialization.policy.jaxb.JaxbGenericTypeExtractor;
import org.json4g.serialization.policy.jaxb.JaxbSerializationCondition;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.json.client.JSONValue;
import com.google.gwt.user.client.Window;

public class JsonEntryPoint implements EntryPoint {

    @Override
    public void onModuleLoad() {
        SerializationPolicy policy = new SerializationPolicy(
                new JaxbSerializationCondition(),
                new JaxbGenericTypeExtractor(),
                new JaxbFieldNamePolicy()
        );
        JsonSerializerFacade serializer = new JsonSerializerFacade(policy);
        
        ArrayList<String> list = new ArrayList<String>();
        list.add("bla");
        list.add("blo");
        list.add("blu");
        HashMap<String, String> map = new HashMap<String, String>();
        map.put("key1", "value1");
        map.put("key2", "value2");
        SomeObject so = new SomeObject(123L, "", new Dependency(456, true, list, map), "something that shouldn't be serialized");
        
        JSONValue json = serializer.serialize(so);
        Window.alert(json.toString());
        SomeObject deserialized = serializer.deserialize(json, SomeObject.class);
        Window.alert(deserialized.toString());
    }

}
